//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#ifndef _PatternsCathFASTAProfile_h__
#define	_PatternsCathFASTAProfile_h__
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#include "ProcessCathFASTAProfile.h"
#include "SearchPrositePattern.h"
#include "Pratt2PatternsByCATH.h"
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
namespace PatternSpace {
  bool EqualDomain (TNode <CathFASTAProfile>* cathFASTAProfile, void* ref);
}  
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
class PatternsCathFASTAProfile {
  
  private:
  
  protected:
    
    String*                  filenameCathFASTAProfile;
    String*                  filenameLigandCathFASTAProfile;
    String*                  filenameExcludeCathFASTAProfile;
    
    String*                  filenamePatternsCompact;
    
    String*                  filenameLigandFASTAProfile;
    String*                  filenameSMI;
    
    String*                  filenameOut;
    
    Pratt2PatternsByCATH*    prattPatterns;
    ProcessCathFASTAProfile* cathFASTAProfile;
    ProcessCathFASTAProfile* ligandCathFASTAProfile;
    ProcessCathFASTAProfile* excludeCathFASTAProfile;
    
    SearchPrositePattern*    searchPattern;
    
  public:
    
    PatternsCathFASTAProfile ();
    PatternsCathFASTAProfile (const PatternsCathFASTAProfile&);
    PatternsCathFASTAProfile (const PatternsCathFASTAProfile*);
    
    ~PatternsCathFASTAProfile ();

    void                     FilenameCathFASTAProfile (String*);
    void                     FilenameLigandCathFASTAProfile (String*);
    void                     FilenameExcludeCathFASTAProfile (String*);
    void                     FilenamePatternsCompact (String*);
    void                     FilenameLigandFASTAProfile (String*);
    void                     FilenameSMI (String*);
    void                     FilenameOut (String*);
    void                     PrattPatterns (Pratt2PatternsByCATH*);
    void                     CathProfile (ProcessCathFASTAProfile*);
    void                     LigandCathFASTAProfile (ProcessCathFASTAProfile*);
    void                     ExcludeCathFASTAProfile (ProcessCathFASTAProfile*);
    void                     SearchPattern (SearchPrositePattern*);
    
    String*                  FilenameCathFASTAProfile (void);
    String*                  FilenameLigandCathFASTAProfile (void);
    String*                  FilenameExcludeCathFASTAProfile (void);
    String*                  FilenamePatternsCompact (void);
    String*                  FilenameLigandFASTAProfile (void);
    String*                  FilenameSMI (void);
    String*                  FilenameOut (void);
    Pratt2PatternsByCATH*    PrattPatterns (void);
    ProcessCathFASTAProfile* CathProfile (void);
    ProcessCathFASTAProfile* LigandCathFASTAProfile (void);
    ProcessCathFASTAProfile* ExcludeCathFASTAProfile (void);
    SearchPrositePattern*    SearchPattern (void);
    
    bool                     LoadData (void);
    
    bool                     ComputeProbPatternBelongToRightGroup (String*);
    bool                     ComputeAverageLINGOSimLigandsFoundByPattern (String*);
    
    bool                     CreateARFF (String*, String*, int, float, float, String*);
    bool                     CreateARFFNominal (String*, String*, int, float, float, String*);
    bool                     CreateARFFBinary (String*, String*, int, float, float, String*);
    
    PatternsCathFASTAProfile operator= (const PatternsCathFASTAProfile&);
    
};
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#endif
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
